const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
const path = require('path');
const pathSep = require('path').sep;
const fs = require('fs');
const coreModuleIds = require('./coreModuleId.json');

const indexModuleIds = require('./indexModule.json');
const getModuleId = require('./getModulelId').getModuleId;
/**
 * Metro configuration
 * https://reactnative.dev/docs/metro
 *
 * @type {import('metro-config').MetroConfig}
 */
const config = {
  // resolver: {
  //   // // 强制所有业务模块从基础包引用 swiper
  //   // unstable_enablePackageExports: true,
  //   // unstable_conditionNames: ['require', 'react-native'],
  //   // blockList: [
  //   //   // 业务包打包时排除 react-native-swiper
  //   //   /node_modules\/react-native-swiper/,
  //   // ],
  //   extraNodeModules: {
  //     // 将公共库指向基础包的node_modules
  //     // react: path.resolve(__dirname, 'base/node_modules/react'),
  //     'react-native-swiper': path.resolve(
  //       __dirname,
  //       'node_modules/react-native-swiper'
  //     ),
  //   },
  // },
  // transformer: {
  //   getTransformOptions: async () => ({
  //     transform: {
  //       inlineRequires: true, // 启用内联优化
  //     },
  //   }),
  // },
  // transformer: {
  //   splitBundles: async () => ({
  //     baseBundle: {
  //       // 提取公共模块（React Native 框架及常用依赖）
  //       test: (module) =>
  //         module.path.includes("node_modules/react-native") ||
  //         module.path.includes("node_modules/react") ||
  //         module.path.includes("node_modules/react-navigation"),
  //     },
  //     businessBundle: {
  //       // 其他业务逻辑文件
  //       test: (module) => module.path.includes("src/business"),
  //     },
  //   }),
  serializer: {
    createModuleIdFactory: () => {
      const projectRootPath = path.resolve(__dirname);
      //   console.log(projectRootPath, "projectRootPath");
      return (path) => {
        const name = getModuleId(projectRootPath, path);
        // let name = "";
        // if (
        //   path.indexOf(
        //     "node_modules" +
        //       pathSep +
        //       "react-native" +
        //       pathSep +
        //       "Libraries" +
        //       pathSep
        //   ) > 0
        // ) {
        //   name = path.substr(path.lastIndexOf(pathSep) + 1);
        // } else if (path.indexOf(projectRootPath) == 0) {
        //   name = path.substr(projectRootPath.length + 1);
        // }
        // //   name = name.replace('.js', '');
        // //   name = name.replace('.png', '');
        // let regExp =
        //   pathSep == "\\"
        //     ? new RegExp("\\\\", "gm")
        //     : new RegExp(pathSep, "gm");
        // name = name.replace(regExp, "_"); //把path中的/换成下划线

        // const coreModuleIds = require("./coreModuleId.json");
        // if (!coreModuleIds.includes(name)) {
        //   coreModuleIds.push(name);
        //   fs.writeFileSync(
        //     projectRootPath + pathSep + "coreModuleId.json",
        //     JSON.stringify(coreModuleIds)
        //   );
        // }

        return name;
      };
    },
    processModuleFilter: (module) => {
      // if (coreModuleIds == null || coreModuleIds.length == 0) {
      //   process.exit(1);
      //   console.log("基础包没打");
      //   return false;
      // }
      const projectRootPath = __dirname;
      //   console.log("module", module);
      //   moduleArr=[moduleArr]
      //   if (module["path"].indexOf(path.sep + "node_module" + path.sep)) {
      //     return false;
      //   }
      // module["path"]

      const name = getModuleId(projectRootPath, module['path']);
      // console.log('module', module['path'], name);
      // console.log("module["path"]",module["path"])
      if (coreModuleIds.includes(name)) {
        // console.log(11);
        return false;
      }

      // if (indexModuleIds.includes(name)) {
      //   // console.log(11);
      //   return false;
      // }

      console.log('module_name', name);

      // // const indexModuleIds = require('./indexModule.json');
      // indexModuleIds.push(name);
      // fs.writeFileSync(
      //   projectRootPath + pathSep + 'indexModule.json',
      //   JSON.stringify(indexModuleIds)
      // );
      return true;
    },
  },
};

// console.log("__dirname", path, __dirname, config);
// console.log("moduleArr---", moduleArr);
module.exports = mergeConfig(getDefaultConfig(__dirname), config);
